ggv_log.o g7towin.o garmin_gpi.o lmx.o random.o xol.o dg-100.o \
navilink.o mtk_logger.o ik3d.o osm.o destinator.o exif.o vidaone.o \
igo8.o gopal.o humminbird.o mapasia.o gnav_trl.o navitel.o ggv_ovl.o \
- jtr.o sbp.o sbn.o mmo.o skyforce.o itracku.o v900.o \
- pocketfms_bc.o pocketfms_fp.o naviguide.o delbin.o
+ jtr.o sbp.o sbn.o mmo.o skyforce.o itracku.o v900.o delbin.o \
+ pocketfms_bc.o pocketfms_fp.o pocketfms_wp.o naviguide.o enigma.o
FMTS=@FMTS@
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h strptime.h
pocketfms_bc.o: pocketfms_bc.c defs.h gbtypes.h
pocketfms_fp.o: pocketfms_fp.c defs.h gbtypes.h
+pocketfms_wp.o: pocketfms_wp.c defs.h gbtypes.h
+enigma.o: enigma.c defs.h gbtypes.h
smplrout.o: smplrout.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h filterdefs.h \
grtcirc.h
static int isFirst = 1;
static route_head *route = NULL;
static waypoint *wpt_to, *wpt_from;
+static double dest_altitude;
#define MYNAME "PocketFMS FlightPlan"
-static xg_callback wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name;
-static xg_callback wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_altitude;
+static xg_callback wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name, wpt_from_elev;
+static xg_callback wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_to_elev, wpt_altitude;
static xg_tag_mapping gl_map[] = {
{ wpt_s, cb_start, "/PocketFMSFlightplan/LIB" },
{ wpt_from_lat, cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Latitude" },
{ wpt_from_lon, cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Longitude" },
+ { wpt_from_elev, cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Elevation" },
{ wpt_from_name, cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/FriendlyShortname" },
{ wpt_to_lat, cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Latitude" },
{ wpt_to_lon, cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Longitude" },
{ wpt_to_name, cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/FriendlyShortname" },
- { wpt_altitude, cb_cdata, "/PocketFMSFlightplan/LIB/PlannedAltitude/@Value" },
+ { wpt_to_elev, cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Elevation" },
+ { wpt_altitude, cb_start, "/PocketFMSFlightplan/LIB/PlannedAltitude" },
{ wpt_e, cb_end, "/PocketFMSFlightplan/LIB" },
{ NULL, 0, NULL}
};
route->rte_name = xstrdup (head->shortname);
route->rte_name = xstrappend(route->rte_name, " - ");
if (tail != NULL)
+ {
route->rte_name = xstrappend(route->rte_name, tail->shortname);
+ tail->altitude = dest_altitude;
+ }
}
xml_deinit();
}
wpt_from->shortname = xstrappend(wpt_from->shortname, args);
}
+void wpt_from_elev(const char *args, const char **unused)
+{
+ if (wpt_from != NULL)
+ wpt_from->altitude = FEET_TO_METERS(atof(args));
+}
+
void wpt_to_lat(const char *args, const char **unused)
{
wpt_to->latitude = atof(args);
wpt_to->shortname = xstrappend(wpt_to->shortname, args);
}
-void wpt_altitude(const char *args, const char **unused)
+void wpt_to_elev(const char *args, const char **unused)
{
- wpt_to->altitude = atof(args);
+ dest_altitude = FEET_TO_METERS(atof(args));
+}
+
+void wpt_altitude(const char *args, const char **attrv)
+{
+ int isFeet = 0;
+ const char **avp = &attrv[0];
+ while (*avp) {
+ if (0 == strcmp(avp[0], "Value")) {
+ wpt_to->altitude = atof(avp[1]);
+ }
+ if (0 == strcmp(avp[0], "Unit")) {
+ isFeet = strcmp (avp[1], "ft") == 0 ? 1 : 0;
+ }
+ avp += 2;
+ }
+ if (isFeet)
+ wpt_to->altitude = FEET_TO_METERS(wpt_to->altitude);
}
ff_vecs_t pocketfms_fp_vecs = {
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+ creator="GPSBabel - http://www.gpsbabel.org"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://www.topografix.com/GPX/1/0"
+ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="51.305278778" minlon="-9.523783684" maxlat="53.423606873" maxlon="4.390666485"/>
+<rte>
+ <rtept lat="52.180873871" lon="-9.523783684">
+ <ele>34.137600</ele>
+ <name>EIKY</name>
+ <cmt>KERRY</cmt>
+ <desc>KERRY</desc>
+ </rtept>
+ <rtept lat="52.701972961" lon="-8.924821854">
+ <ele>14.020800</ele>
+ <name>EINN</name>
+ <cmt>SHANNON</cmt>
+ <desc>SHANNON</desc>
+ </rtept>
+ <rtept lat="53.423606873" lon="-6.302777767">
+ <name>DAP(EI</name>
+ <cmt>DUBLIN</cmt>
+ <desc>DUBLIN</desc>
+ </rtept>
+ <rtept lat="51.305278778" lon="4.390666485">
+ <ele>3.048000</ele>
+ <name>EBHN</name>
+ <cmt>Hoevenen</cmt>
+ <desc>Hoevenen</desc>
+ </rtept>
+</rte>
+</gpx>
<time>1970-01-01T00:00:00Z</time>
<bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
<wpt lat="51.158882000" lon="14.950277000">
+ <ele>237.134400</ele>
<name>EDBX</name>
<cmt>EDBX</cmt>
<desc>EDBX</desc>
</wpt>
<wpt lat="51.302700000" lon="14.902600000">
+ <ele>609.600000</ele>
<name>Horka,NOL(GM)</name>
<cmt>Horka,NOL(GM)</cmt>
<desc>Horka,NOL(GM)</desc>
</wpt>
<wpt lat="51.343624000" lon="14.952033000">
+ <ele>609.600000</ele>
<name>RO(EDBR)-N</name>
<cmt>RO(EDBR)-N</cmt>
<desc>RO(EDBR)-N</desc>
</wpt>
<wpt lat="51.363167000" lon="14.950000000">
+ <ele>609.600000</ele>
<name>EDBR</name>
<cmt>EDBR</cmt>
<desc>EDBR</desc>
<name>EDBX - EDBR</name>
<desc>PocketFMS flightplan</desc>
<rtept lat="51.158882000" lon="14.950277000">
+ <ele>237.134400</ele>
<name>EDBX</name>
</rtept>
<rtept lat="51.302700000" lon="14.902600000">
+ <ele>609.600000</ele>
<name>Horka,NOL(GM)</name>
</rtept>
<rtept lat="51.343624000" lon="14.952033000">
+ <ele>609.600000</ele>
<name>RO(EDBR)-N</name>
</rtept>
<rtept lat="51.363167000" lon="14.950000000">
+ <ele>157.581600</ele>
<name>EDBR</name>
</rtept>
</rte>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+ creator="GPSBabel - http://www.gpsbabel.org"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://www.topografix.com/GPX/1/0"
+ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
+<wpt lat="51.158882000" lon="14.950277000">
+ <name>EDBX </name>
+ <cmt>EDBX </cmt>
+ <desc>EDBX </desc>
+</wpt>
+<wpt lat="51.302700000" lon="14.902600000">
+ <name>Horka,NOL(GM) </name>
+ <cmt>Horka,NOL(GM) </cmt>
+ <desc>Horka,NOL(GM) </desc>
+</wpt>
+<wpt lat="51.343624000" lon="14.952033000">
+ <name>RO(EDBR)-N </name>
+ <cmt>RO(EDBR)-N </cmt>
+ <desc>RO(EDBR)-N </desc>
+</wpt>
+<wpt lat="51.363167000" lon="14.950000000">
+ <name>EDBR </name>
+ <cmt>EDBR </cmt>
+ <desc>EDBR </desc>
+</wpt>
+</gpx>
--- /dev/null
+EDBX 51.158882 14.950277
+Horka,NOL(GM) 51.302700 14.902600
+RO(EDBR)-N 51.343624 14.952033
+EDBR 51.363167 14.950000
#
# PocketFMS breadcrumb files
-#${TMPDIR}
+#
gpsbabel -i pocketfms_bc -f ${REFERENCE}/pocketfms_bc -o gpx -F ${TMPDIR}/pocketfms_bc.gpx
compare ${REFERENCE}/pocketfms_bc.gpx ${TMPDIR}/pocketfms_bc.gpx
gpsbabel -i gpx -f ${REFERENCE}/pocketfms_bc.gpx -o pocketfms_bc -F ${TMPDIR}/pocketfms_bc
gpsbabel -i pocketfms_fp -f ${REFERENCE}/pocketfms_fp.xml -o gpx -F ${TMPDIR}/pocketfms_fp.gpx
compare ${REFERENCE}/pocketfms_fp.gpx ${TMPDIR}/pocketfms_fp.gpx
+#
+# PocketFMS waypoints file (.txt)
+#
+gpsbabel -i gpx -f ${REFERENCE}/pocketfms_fp.gpx -o pocketfms_wp -F ${TMPDIR}/pocketfms_wp.txt
+compare ${REFERENCE}/pocketfms_wp.txt ${TMPDIR}/pocketfms_wp.txt
+gpsbabel -i pocketfms_wp -f ${REFERENCE}/pocketfms_wp.txt -o gpx -F ${TMPDIR}/pocketfms_wp.gpx
+compare ${REFERENCE}/pocketfms_wp.gpx ${TMPDIR}/pocketfms_wp.gpx
+
+#
+# MGL Enigma route file (.ert)
+#
+gpsbabel -i gpx -f ${REFERENCE}/enigma.gpx -o enigma -F ${TMPDIR}/enigma.ert
+compare ${REFERENCE}/enigma-gpsb.ert ${TMPDIR}/enigma.ert
+gpsbabel -i enigma -f ${REFERENCE}/enigma-pfms.ert -o gpx -F ${TMPDIR}/enigma.gpx
+compare ${REFERENCE}/enigma.gpx ${TMPDIR}/enigma.gpx
+
#
# Columbus/Visiontac V900 "binary" csv files
#
extern ff_vecs_t v900_vecs;
extern ff_vecs_t pocketfms_bc_vecs;
extern ff_vecs_t pocketfms_fp_vecs;
+extern ff_vecs_t pocketfms_wp_vecs;
+extern ff_vecs_t enigma_vecs;
static
vecs_t vec_list[] = {
{
&pocketfms_fp_vecs,
"pocketfms_fp",
- "PocketFMS flightplan",
- NULL
+ "PocketFMS flightplan (.xml)",
+ "xml"
+ },
+ {
+ &pocketfms_wp_vecs,
+ "pocketfms_wp",
+ "PocketFMS waypoints (.txt)",
+ "txt"
},
{
&v900_vecs,
"Naviguide binary route file (.twl)",
"twl"
},
+ {
+ &enigma_vecs,
+ "enigma",
+ "Enigma binary waypoint file (.ert)",
+ "ert"
+ },
{
&delbin_vecs,
"delbin",
--- /dev/null
+<para>\r
+ The <ulink url="http://www.mglavionics.co.za/">MGL Avionics</ulink> format holds waypoints or routes. These routes can be loaded by the MGL Stratomaster Enigma EFIS series (Enigma, Odyssey, Voyager, Explorer). \r
+</para>\r
+<para>\r
+ The format is designed for microcontrollers. The use is free for any none military application. You can find a detailed description in the <ulink url="http://www.mglavionics.co.za/Docs/Enigma%20Waypoint%20format.pdf">MGL Documentation</ulink>.\r
+</para>\r
--- /dev/null
+<para>\r
+ This format provides support for the <ulink url="www.pocketfms.com">PocketFMS</ulink> user waypoints text file. \r
+</para>\r
+<para>\r
+ PocketFMS waypoint text files contain one waypoint per line. Any waypoint has name, latitude and longitude, separated by space. Latitude and longitude are either decimal degrees or degrees°minutes'seconds'' triples. For details see the PocketFMS help file. You can also visit the very friendly <ulink url="http://www.pocketfms.com/phpBB3/">PocketFMS forum</ulink>. \r
+</para>\r